package br.com.saeng2D.formulario.caixa_apoio;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import br.com.saeng2D.formulario.caixa.ContainerAnimado;
import br.com.saeng2D.formulario.caixa.GrupoContainerAnimado;
import br.com.saeng2D.formulario.caixa.Dialogo;
import br.com.saeng2D.objeto.AbstratoObjeto;
import br.com.saeng2D.objeto.apoio.Apoio1;
import br.com.saeng2D.objeto.apoio.Apoio2;
import br.com.saeng2D.objeto.apoio.Apoio3;
import br.com.saeng2D.objeto.ponto.Ponto;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.util.Constantes;
import br.com.saeng2D.util.P2D;
import br.com.saeng2D.util.Util;

//Caixa de dialogo para selecionamento de um objeto do tipo apoio
public class DialogoApoios extends Dialogo {
	private static final long serialVersionUID = 1L;
	private ControleContainerAnimadoApoio controleContainerAnimado1;
	private ControleContainerAnimadoApoio controleContainerAnimado2;
	private ControleContainerAnimadoApoio controleContainerAnimado3;
	private Ponto ponto;
	
	public DialogoApoios(Superficie superficie, Ponto ponto) {
		super(superficie);
		this.ponto = ponto;
		montarLayout2();
		registrarEvento2();
		setVisible(true);
	}
	
	private void montarLayout2() {
		Apoio1 apoio1 = new Apoio1(50, 50);
		GrupoContainerAnimado grupo = new GrupoContainerAnimado();
		
		ContainerAnimado containerAnimado1 = new ContainerAnimado(apoio1);
		controleContainerAnimado1 = new ControleContainerAnimadoApoio(Util.getString("label_apoio1"), containerAnimado1, this, 10, 10, 250, 200);
//		controleContainerAnimado1.setContainerAnimado(containerAnimado1);
		panelCentral.add(controleContainerAnimado1);
		grupo.adicionarContainerAnimado(containerAnimado1);

		Apoio2 apoio2 = new Apoio2(50, 50);
		ContainerAnimado containerAnimado2 = new ContainerAnimado(apoio2);
		controleContainerAnimado2 = new ControleContainerAnimadoApoio(Util.getString("label_apoio2"), containerAnimado2, this, 270, 10, 250, 200);
//		controleContainerAnimado2.setContainerAnimado(containerAnimado2);
		panelCentral.add(controleContainerAnimado2);
		grupo.adicionarContainerAnimado(containerAnimado2);

		Apoio3 apoio3 = new Apoio3(50, 50);
		ContainerAnimado containerAnimado3 = new ContainerAnimado(apoio3);
		controleContainerAnimado3 = new ControleContainerAnimadoApoio(Util.getString("label_apoio3"), containerAnimado3, this, 530, 10, 250, 200);
//		controleContainerAnimado3.setContainerAnimado(containerAnimado3);
		panelCentral.add(controleContainerAnimado3);
		grupo.adicionarContainerAnimado(containerAnimado3);
		
		setSize(810, 290);
		Util.centralizar(this, superficie.getFormularioPrincipal());
	}

	private void registrarEvento2() {
		buttonAdicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				adicionarApoioNaSuperficie();
			}
		});
	}

	public void adicionarNaSuperficie() {
		adicionarApoioNaSuperficie();
	}
	
	private void adicionarApoioNaSuperficie() {
		boolean adicionado = false;
		boolean validado = true;
		AbstratoObjeto[] objetos = superficie.getObjetos();
		Apoio1 apoio1_ = null;
		Apoio2 apoio2_ = null;
		Apoio3 apoio3_ = null;
		for (AbstratoObjeto objeto : objetos) {
			 if(objeto instanceof Apoio3) {
				 apoio3_ = (Apoio3) objeto;
			 } else if(objeto instanceof Apoio2) {
				 apoio2_ = (Apoio2) objeto;
			 } else if(objeto instanceof Apoio1) {
				 apoio1_ = (Apoio1) objeto;
			 }
		}
		if(apoio3_ != null) {
			Util.mensagem(this, Util.getString("msg_apoio3_inserido"));
			return;
		}
		
		if(controleContainerAnimado1.getContainerAnimado().isSelecionado()) {
			boolean apoioInserido = false;
			for (AbstratoObjeto objeto : objetos) {
				 if(objeto instanceof Apoio1) {
					 apoioInserido = true;
				 }
			}
			if(apoioInserido) {
				validado = false;
				Util.mensagem(this, Util.getString("msg_apoio1_inserido"));
			} else {
				Apoio1 apoio1 = (Apoio1) controleContainerAnimado1.getContainerAnimado().getAbstratoAnimado().prototipo();
				apoio1.alterarTamanho(Util.getInt("tamanho_padrao_apoio1"));
				ponto.setCorPlotado(apoio1.getCorFundo());
				ponto.setTipoPonto(Constantes.TIPO_PONTO_GENERO_1);
				apoio1.setPonto(ponto);
				P2D p2d = apoio1.getVetorReferencia().criarP2D();
				apoio1.setX(ponto.getX() - p2d.x);
				apoio1.setY(ponto.getY() + p2d.y);
				superficie.adicionarObjeto(apoio1);
				adicionado = true;
			}
		}
		if(controleContainerAnimado2.getContainerAnimado().isSelecionado()) {
			boolean apoioInserido = false;
			for (AbstratoObjeto objeto : objetos) {
				 if(objeto instanceof Apoio2) {
					 apoioInserido = true;
				 }
			}
			if(apoioInserido) {
				validado = false;
				Util.mensagem(this, Util.getString("msg_apoio2_inserido"));
			} else {
				Apoio2 apoio2 = (Apoio2) controleContainerAnimado2.getContainerAnimado().getAbstratoAnimado().prototipo();
				apoio2.alterarTamanho(Util.getInt("tamanho_padrao_apoio2"));
				ponto.setCorPlotado(apoio2.getCorFundo());
				ponto.setTipoPonto(Constantes.TIPO_PONTO_GENERO_2);
				apoio2.setPonto(ponto);
				P2D p2d = apoio2.getVetorReferencia().criarP2D();
				apoio2.setX(ponto.getX() - p2d.x);
				apoio2.setY(ponto.getY() + p2d.y);
				superficie.adicionarObjeto(apoio2);
				adicionado = true;
			}
		}
		if(controleContainerAnimado3.getContainerAnimado().isSelecionado()) {
			if(apoio1_ != null || apoio2_ != null) {
				validado = false;
				Util.mensagem(this, Util.getString("msg_apoio1_ou_apoio2_inserido"));
			} else {
				Apoio3 apoio3 = (Apoio3) controleContainerAnimado3.getContainerAnimado().getAbstratoAnimado().prototipo();
				apoio3.alterarTamanho(Util.getInt("tamanho_padrao_apoio3"));
				ponto.setCorPlotado(apoio3.getCorFundo());
				ponto.setTipoPonto(Constantes.TIPO_PONTO_GENERO_3);
				apoio3.setPonto(ponto);
				P2D p2d = apoio3.getVetorReferencia().criarP2D();
				apoio3.setX(ponto.getX() - p2d.x);
				apoio3.setY(ponto.getY() + p2d.y);
				superficie.adicionarObjeto(apoio3);
				adicionado = true;
			}
		}
		if(validado) {
			if(adicionado) {
				dispose();
			} else {
				Util.mensagem(this, Util.getString("msg_nao_selecionado"));
			}
		}
	}
}